package com.chukun.interview.feature.inf.impl;

import com.chukun.interview.feature.inf.base.Shape;

/**
 * 设计成一个只读对象，不支持修改，不可变对象
 *
 * Square对象与Circle03的相似点:
 * 1、使用公开的只读变量（使用 final 修饰符来声明只读变量）。Circle 类的变量 radius，和 Square 类的变量 side，都是公开的只读的变量。这样的声明，是为了公开变量的只读性。
 * 2、公开的只读变量，需要在构造方法中赋值，而且只在构造方法中赋值，且这样的构造方法还是公开的方法。Circle 类的构造方法给 radius 变量赋值，Square 类的构造方法给 side 变量赋值。这样的构造方法，解决了对象的初始化问题。
 * 3、没有了读取的方法；公开的只读变量，替换了掉了公开的读取方法。这样的变化，使得代码量总体变少了。
 *
 * 这么多相似的地方，相似的代码，能不能进一步地简化?
 *
 * 可以使用java的档案类,档案类的出现，就是为了解决不可变对象代码臃肿的问题
 */
public class Square  implements Shape {

    private final double side;

    public Square(double side) {
        this.side = side;
    }

    @Override
    public  double getArea() {
        return side * side;
    }
}
